import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

class FaceAuthExample extends StatefulWidget {
  @override
  _FaceAuthExampleState createState() => _FaceAuthExampleState();
}

class _FaceAuthExampleState extends State<FaceAuthExample> {
  static const MethodChannel _channel = MethodChannel('native_bridge');
  static const EventChannel _eventChannel = EventChannel('native_events');
  
  String _status = '准备就绪';
  bool _isLoading = false;

  @override
  void initState() {
    super.initState();
    _setupEventChannel();
  }

  void _setupEventChannel() {
    _eventChannel.receiveBroadcastStream().listen((event) {
      print('收到事件: $event');
      // 处理来自Android的事件
    });
  }

  // 请求MediaProjection权限
  Future<void> _requestMediaProjection() async {
    try {
      setState(() {
        _isLoading = true;
        _status = '请求屏幕录制权限...';
      });

      final result = await _channel.invokeMethod('requestMediaProjection');
      
      if (result == 'NEED_PERMISSION') {
        setState(() {
          _status = '请在系统弹窗中允许屏幕录制权限';
        });
        
        // 这里需要调用系统API请求MediaProjection权限
        // 由于Flutter无法直接调用startActivityForResult，
        // 需要通过插件或原生代码实现
        _showPermissionDialog();
      }
    } catch (e) {
      setState(() {
        _status = '请求权限失败: $e';
      });
    } finally {
      setState(() {
        _isLoading = false;
      });
    }
  }

  // 开始人脸验证
  Future<void> _startFaceAuth() async {
    try {
      setState(() {
        _isLoading = true;
        _status = '开始人脸验证...';
      });

      // 这里传入你的业务token
      final result = await _channel.invokeMethod('faceAuth', 'your_biz_token_here');
      
      if (result == true) {
        setState(() {
          _status = '人脸验证成功';
        });
      } else {
        setState(() {
          _status = '人脸验证失败';
        });
      }
    } catch (e) {
      setState(() {
        _status = '人脸验证出错: $e';
      });
    } finally {
      setState(() {
        _isLoading = false;
      });
    }
  }

  void _showPermissionDialog() {
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: Text('需要屏幕录制权限'),
        content: Text('人脸验证需要屏幕录制权限来增强安全性，请在系统弹窗中允许。'),
        actions: [
          TextButton(
            onPressed: () => Navigator.of(context).pop(),
            child: Text('知道了'),
          ),
        ],
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('人脸验证示例'),
      ),
      body: Padding(
        padding: EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              '状态: $_status',
              style: TextStyle(fontSize: 16),
              textAlign: TextAlign.center,
            ),
            SizedBox(height: 32),
            ElevatedButton(
              onPressed: _isLoading ? null : _requestMediaProjection,
              child: Text('请求屏幕录制权限'),
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: _isLoading ? null : _startFaceAuth,
              child: Text('开始人脸验证'),
            ),
            if (_isLoading) ...[
              SizedBox(height: 16),
              CircularProgressIndicator(),
            ],
          ],
        ),
      ),
    );
  }
}

// 使用说明：
// 1. 首先调用 requestMediaProjection() 请求屏幕录制权限
// 2. 在系统弹窗中允许权限后，调用 startFaceAuth() 开始人脸验证
// 3. 人脸验证过程中，SDK会自动录制屏幕内容来增强安全性
// 4. 验证完成后会返回结果

// 注意事项：
// - MediaProjection权限需要用户手动在系统弹窗中允许
// - 每次应用重启都需要重新请求权限
// - 权限授予后，人脸验证功能才能正常工作 